<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
  <meta name="baidu-site-verification" content="code-UjJKh3jtOo">
  <link rel="stylesheet" href="//unpkg.com/@highlightjs/cdn-assets@11.5.0/styles/atom-one-dark.min.css">
  <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
  <title>Tit1e</title>
  <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2767111597631391" crossorigin="anonymous"></script>
  
<link rel="stylesheet" href="/css/style.css">

<meta name="generator" content="Hexo 6.3.0"><link rel="alternate" href="/atom.xml" title="Tit1e" type="application/atom+xml">
</head>

<body class="dark">
    <div class="container">
    <header class="header">
  <div class="title">
      <a href="/" class="logo">Tit1e</a>
      <div class="btn-dark"></div>
      <script>
        let bodyClx = document.body.classList;
        let btnDark = document.querySelector('.btn-dark');
        let sysDark = window.matchMedia('(prefers-color-scheme: dark)');
        let darkVal = localStorage.getItem('dark');

        let setDark = (isDark) => {
        bodyClx[isDark ? 'add' : 'remove']('dark');
        localStorage.setItem('dark', isDark ? 'yes' : 'no');
        };

        setDark(darkVal ? darkVal === 'yes' : sysDark.matches);
        requestAnimationFrame(() => bodyClx.remove('not-ready'));

        btnDark.addEventListener('click', () => setDark(!bodyClx.contains('dark')));
        sysDark.addEventListener('change', (event) => setDark(event.matches));
      </script>
  </div>
    <ul class="menu">
        
        
        
        
        <li class="menu-item ">
            <a href="/" class="menu-item-link">Home</a>
        </li>
        
        
        <li class="menu-item ">
            <a href="/archives/" class="menu-item-link">Archives</a>
        </li>
        
        
        <li class="menu-item ">
            <a href="/atom.xml" class="menu-item-link">RSS</a>
        </li>
        
        
        <li class="menu-item ">
            <a target="_blank" rel="noopener" href="https://pixeltimer.art" class="menu-item-link">Pixel Timer</a>
        </li>
        
    </ul>
    <div class="search-box">
        <input type="search" id="search" placeholder="搜索">
    </div>
</header>
    <article class="post">
  <div class="post-meta">
    <span class="post-time">5 / 23, 2021</span>
  </div>
  <div class="post-title">
    <h1 class="title">Kindle2Flomo</h1>
  </div>
  
  <ul class="post-tags">
    
    <li class="tag-item">
      #折腾
    </li>
    
    <li class="tag-item">
      #独立开发
    </li>
    
  </ul>
  
  <div class="post-content">
    <p><img src="https://personal-1251959693.cos.ap-chengdu.myqcloud.com/2021-05-23-Xnip2021-05-23_17-43-21.png"></p>
<p>作为 Kindle 用户，一开始的时候只在 Kindle 上做标记，做完标记后完全不知道怎么整理怎么回顾。</p>
<p>后来无意中接触到了 Klib，这是一款 Kindle 笔记整理软件，开始我兴致冲冲地将所有 Kindle 中的笔记全导入其中，又认认真真整理一遍。但是然后呢？软件只在电脑上有，而且它也仅仅只是个笔记整理软件，除了整理笔记，不再有其他功能。这样一款软件我开启的频率可想而知。所以虽然我有了 Kindle 笔记的整理软件，但软件都吃灰，软件中的笔记自然依旧是吃灰状态。</p>
<p>当然，如果单纯作为一款笔记整理软件，Klib 我觉得是非常优秀的。只是它已经满足不了我目前的需求。</p>
<p>半年前，我发现了一款刚起步的软件：<a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a>。我刚接触的时候它只有网页版与微信公众号，后来逐渐有了 PWA，Mac 客户端，再后来有了iOS 与安卓的客户端，期间开放了 api，api 开放后，各种插件都冒了出来，浏览器插件，快捷指令，telegram机器人等。当然我这个工具也是。</p>
<p><a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a> 的这两个特色是最吸引我的：轻量与定时回顾。首先 <a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a> 是一个非常轻量的软件，没有复杂的设计、文本编辑器，简简单单，软件进去就是 MEMO，输入框只支持简单的项目符号，再无其他。使用时不需要很强的“仪式感”，想写什么写什么。定时回顾是你可以在软件中设置某个时间点，会通过公众号定时向你推送你之前记录的 MEMO。后来有个移动客户端后，小组件也有了这个功能，回顾更为便捷。</p>
<p><img src="https://personal-1251959693.cos.ap-chengdu.myqcloud.com/2021-05-23-IMG_8850.PNG"></p>
<p>接触了 <a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a> 后，我发觉它跟读书笔记我觉得简直是绝配，在 <a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a> 中创建一个读书笔记的 tag，将笔记关联上这个 tag，然后每天定时回顾（现在有了小组件就更为方便了）。</p>
<p>所以现在的主要问题就成了怎么将 Kindle 中的笔记导入到 <a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a>。</p>
<p>前几天少楠大佬（<a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a> 创始人之一）转发了一篇公众号文章，是这个公众号的主人（lupeng）开发了一个工具，可以将 Kindle 笔记导入到 <a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a>。我试用了下，没想到我的第一个笔记就识别不出来，而且有些我想要的功能，这个工具也没实现，比如编辑，配置 tag 位置。正好我以前（当我把 Klib 中的笔记一条一条导入到 <a target="_blank" rel="noopener" href="https://flomoapp.com/register2/?MTAzNDE">flomo</a> 中的时候）也有过开发一个类似工具的念头，于是我打算在 lupeng 的基础上重新开发了一遍，加上一些我自己需要的功能，到时候找他授权。</p>
<p>软件主要功能开发还是挺快的，周五那天团建完，喝了不少酒，洗漱完发现不困，脑袋里一直想着这个工具，索性就直接写。大概从 11 点半写到了 1 点半，主要功能都已经实现，正好也困了，于是就睡下了。</p>
<p>第二天 8 点多醒来开始打磨细节与界面，结果打磨了一整天……傍晚的时候才将它交给少楠。</p>
<p>第一版的 Kindle2Flomo 只支持从 HTML 文件导入，但 HTML 文件只能单本书导出，无法在一个文件中导出所有书的笔记，我觉得如果用户已经累积了不少笔记的话，用 HTML 文件导出会非常的麻烦，所以我后面又添加了从 <code>My Clippings.txt</code> 导出，这样会方便很多（lupeng 就是觉得用这种方式太麻烦了，因为需要连数据线，所以才选择从 HTML 导入）。之后我还加了笔记拖拽调整顺序的功能，虽然我觉得这个功能应该不常用。</p>
<p>在线使用地址：<a target="_blank" rel="noopener" href="https://tit1e.github.io/kindle2Flomo/">Kindle2Flomo</a></p>
<p>Mac <a target="_blank" rel="noopener" href="https://wwr.lanzoui.com/b02c3nkyf">应用下载</a> 密码:47if（有多个就下载最新的版本）</p>
<p>Github Releases [<a target="_blank" rel="noopener" href="https://github.com/Tit1e/kindle2Flomo/releases]">https://github.com/Tit1e/kindle2Flomo/releases]</a></p>

  </div>
  <div class="post-near">
    
    <a
      class="post-near-prev"
      href="/p/de983388.html"
      title="Mac 出现应用无法打开的一些请况处理方式总结"
    >
      <span class="arrow">←</span>
      <span class="post-near-title">
        Mac 出现应用无法打开的一些请况处理方式总结
      </span>
    </a>
    
    
    <a
      class="post-near-next"
      href="/p/f8824382.html"
      title="生活再次趋于平稳"
    >
      <span class="post-near-title">
        生活再次趋于平稳
      </span>
      <span class="arrow">→</span>
    </a>
    
  </div>
</article>

    <footer class="footer">
  <p>本博客采用 <a class="license-link" rel="license noopener" target="_blank" href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh">署名-非商业性使用-相同方式共享 4.0 国际</a>协议进行许可</p>
  <p>
    <span>Thanks For <a target="_blank" rel="noopener" href="https://github.com/nanxiaobei/hugo-paper" taget="_blank">hugo-paper</a></span>
    <span style="margin-left: 10px;">&copy; 2016-2025 by Tit1e</span>
  </p>
</footer>
    </div>
    <script src="//unpkg.com/@highlightjs/cdn-assets@11.5.0/highlight.min.js"></script>
<script>
  hljs.initHighlightingOnLoad();
  var _hmt = _hmt || [];
    (function() {
    var hm = document.createElement("script");
    hm.src = "https://hm.baidu.com/hm.js?6349d3bc54baea0b04a65145c5e3b799";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(hm, s);
    })();
    const block = document.querySelectorAll('.post-content')[0]
    block.addEventListener('click', e => {
        const {nodeName, src} = e.target
        if(nodeName !== 'IMG') return
        document.body.classList.add('overflow-hidden')
        const div = document.createElement('div')
        div.id = 'global-cover'
        div.title = '点击关闭'
        const a = document.createElement('a')
        a.href = src
        a.target="_blank"
        a.title = '点击打开原图'
        const img = document.createElement('img')
        img.className = 'show-pic'
        img.src = src
        a.appendChild(img)
        div.appendChild(a)
        document.body.appendChild(div)
    })
    document.body.addEventListener('click', e => {
        if(e.target.id === 'global-cover'){
            document.body.classList.remove('overflow-hidden')
            document.body.removeChild(e.target)
        }
    })
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7M04VN3JZ4"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-7M04VN3JZ4');
</script>

<script src="/js/search.js"></script>


</body>
</html>